<%@ page import="com.ibatis.sqlmap.implgen.bean.ParsedClass" %>
<%@ page import="com.ibatis.sqlmap.implgen.bean.ParsedMethod" %>
<%@ page import="com.ibatis.sqlmap.implgen.bean.ParsedParam" %>
<%! public ParsedClass parsedClass; %>

package <%= parsedClass.getPackageStr() %>;

import com.ibatis.dao.client.DaoManager;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;
import com.ibatis.dao.client.template.SqlMapDaoTemplate;

import java.util.HashMap;
import java.sql.SQLException;
import java.io.Reader;
import java.io.IOException;


/**
 * Generated implementation of <%= parsedClass.getFullyQualifiedName() %>.
 *
 * Generated by ibatis-implgen
 * http://code.google.com/p/ibatis-implgen/
 *
 * DO NOT EDIT
 *
 * @see <%= parsedClass.getFullyQualifiedName() %>
 */
public class <%= parsedClass.getGeneratedJavaClassName() %> extends <%= parsedClass.getForceExtendClass() %>
    <%= parsedClass.isClassAnInterface() ? "implements " + parsedClass.getName() : "" %> {

    /**
     * Constructor
     *
     * @param daoManager DaoManager
     */
    public <%= parsedClass.getGeneratedJavaClassName() %>(DaoManager daoManager) {
        super(daoManager);
    }

<% for (ParsedMethod method : parsedClass.getMethods()) { %>
    <% if ( method.isOkToOutputInImplClass() ) { %>
    public <%= method.getReturns() %> <%= method.getName() %>(<%
            int i = 0;
            for (ParsedParam param : method.getParams()) { %><%-- 
                --%><%= (i > 0 ? ", " : "") %><%= param.getJavaTypeShort() %> <%= param.getName()%><%
                i++;
            } %>) <%= method.isThrows() ? "throws " + method.getThrowsClass() : "" %> {
        <% if ( method.isAnyParameters() ) { %><%--
            --%><% if ( method.isMultipleParameters() ) { %><%--
                --%>HashMap<String, Object> params = new HashMap<String, Object>();<%--
                --%><% for (ParsedParam param : method.getParams()) { %>
        params.put("<%= param.getName()%>", <%= param.getName()%>);<%--
                --%><% } %><%--
            --%><% } %><%--
        --%><% } %>
        <% if ( method.isAlternativeThrows() ) { %>
            try {
        <% } %>
        //noinspection unchecked,UnnecessaryLocalVariable
        <% if ( !method.isReturnsVoid() ) { %><%--
        --%><%= method.getReturns() %> ret = (<%= method.getReturns() %>)<%--
        --%><% } %><%--
        --%><% if ( method.isReturnsList() ) { %><%-- //
        --%> queryForList("<%= parsedClass.getFullyQualifiedName() %>.<%= method.getIdForIbatis() %>", <%= method.getParamsVarName() %>);<%--
        --%> <% } else if (ParsedMethod.Type.UPDATE.equals(method.getType()) ) { %><%--
        --%> update("<%= parsedClass.getFullyQualifiedName() %>.<%= method.getIdForIbatis() %>", <%= method.getParamsVarName() %>);<%--
        --%> <% } else if (ParsedMethod.Type.INSERT.equals(method.getType()) ) { %><%--
        --%> insert("<%= parsedClass.getFullyQualifiedName() %>.<%= method.getIdForIbatis() %>", <%= method.getParamsVarName() %>);<%--
        --%> <% } else if (ParsedMethod.Type.DELETE.equals(method.getType()) ) { %><%--
        --%> delete("<%= parsedClass.getFullyQualifiedName() %>.<%= method.getIdForIbatis() %>", <%= method.getParamsVarName() %>);<%--
        --%> <% } else { %><%--
        --%> queryForObject("<%= parsedClass.getFullyQualifiedName() %>.<%= method.getIdForIbatis() %>", <%= method.getParamsVarName() %>);<%--
        --%> <% } %>
        <% if ( !method.isReturnsVoid() ) { %>
        return ret;
        <% } %>
        <% if ( method.isAlternativeThrows() ) { %>
            } catch (SQLException e) {
                throw new <%= method.getAlternativeThrowsClass() %>(e);
            }
        <% } %>
    }
    <% } %>
<% } %>

}